package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloDiaClase;
import com.ipartek.formacion.gestformwww.modelo.beans.Calendario;
import com.ipartek.formacion.gestformwww.modelo.beans.DiaClase;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author David y Borja
 */
public class GuardarCalendarioAccion implements Accion {

   private final String visualizarcursos = "visualizar-curso-accion";
    private final String listarcursos = "listar-cursos-accion";
    private final String crearcalendario = "visualizar-crear-calendario-accion";

   

    /**
     * Ejecuta la accion de crear calendario
     * @param servlet
     * @param request
     * @param response
     * @return
     */
    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        HttpSession sesion = request.getSession();
        AccionRouter router = null;
         AccionServlet as=(AccionServlet) servlet;
        ArrayList<String> mensajes = new ArrayList<String>();
        int idCurso;
        boolean ejecutar = true;
        ArrayList<String> errorm = new ArrayList<String>();
        ModeloDiaClase modelo = (ModeloDiaClase) servlet.getServletContext().getAttribute("ModeloDiaClase");
        DiaClase diaclase = new DiaClase();
        Calendario calendario = new Calendario();

        ejecutar = Verificador.sinReenvio("aleatorioCrearCalendario", sesion, request);
        String accionCalendario = request.getParameter("accionCalendario");

        if (sesion.getAttribute("usuario") != null && request.getMethod().equalsIgnoreCase("POST")) {
            if (Verificador.numeroValido(request.getParameter("idCurso"))) {
                idCurso = Integer.parseInt(request.getParameter("idCurso"));
                diaclase.setCurId(idCurso);
                calendario.setCalFechaIni(request.getParameter("fechaini"));
                calendario.setCalFechaFin(request.getParameter("fechafin"));
                diaclase.setClaHoraInicioMan(request.getParameter("horainim"));
                diaclase.setClaHoraFinMan(request.getParameter("horafinm"));
                diaclase.setClaHoraInicioTar(request.getParameter("horainit"));
                diaclase.setClaHoraFinTar(request.getParameter("horafint"));
                diaclase.setModId(request.getParameter("modulo"));
                diaclase.setAulId(request.getParameter("aula"));
                diaclase.setDocId(request.getParameter("docente"));
                diaclase.setClaObserv(request.getParameter("observaciones"));
                calendario.setSabados(request.getParameter("sabados"));
                calendario.setDiaClase(diaclase);
                errorm = calendario.validar();
                if (errorm.isEmpty()) {
                    if (ejecutar) {
                        try {
                            if (accionCalendario.equals("crear")) {//Crear
                                if (!modelo.comprobarDias(calendario)) {
                                    modelo.crearCalendario(calendario);
                                    mensajes.add("mensaje-crear-diaclase");
                                } else {
                                    errorm.add("error-crear-diaclase-rango-incorrecto");
                                }
                            } else if (accionCalendario.equals("modificar")) {//Modificar
                                modelo.modificarCalendario(calendario);
                                mensajes.add("mensaje-modificar-diaclase");
                            } else if (accionCalendario.equals("generar")) {//Generar calendario
                                modelo.borrarCalendario(idCurso);
                                modelo.crearCalendario(calendario);
                                mensajes.add("mensaje-crear-calendario");
                            } else if (accionCalendario.equals("borrar")) {//Borrar dia clase
                                modelo.borrarCalendario(calendario);
                                mensajes.add("mensaje-borrar-diaclase");
                            }
                        } catch (GestorFormacionExcepcion ex) {
                            Logger.getLogger(GuardarCalendarioAccion.class.getName()).log(Level.SEVERE, null, ex);
                            sesion.setAttribute("excepciones", ex.getMessage());
                        }
                    }
                    if (errorm.isEmpty()) {
                        sesion.setAttribute("mensajes", mensajes);
                        try {
                            router=as.getFactory().getAction(as.getNombreClaseRecurso(visualizarcursos),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                        } catch (ClassNotFoundException ex) {
                            Logger.getLogger(GuardarCalendarioAccion.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (InstantiationException ex) {
                            Logger.getLogger(GuardarCalendarioAccion.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (IllegalAccessException ex) {
                            Logger.getLogger(GuardarCalendarioAccion.class.getName()).log(Level.SEVERE, null, ex);
                        }
                       
                    } else {
                        request.setAttribute("errores", errorm);
                        request.setAttribute("calendario", calendario);
                        try {
                            router=as.getFactory().getAction(as.getNombreClaseRecurso(crearcalendario),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                        } catch (ClassNotFoundException ex) {
                            Logger.getLogger(GuardarCalendarioAccion.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (InstantiationException ex) {
                            Logger.getLogger(GuardarCalendarioAccion.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (IllegalAccessException ex) {
                            Logger.getLogger(GuardarCalendarioAccion.class.getName()).log(Level.SEVERE, null, ex);
                        }
                       
                    }
                } else {
                    request.setAttribute("errores", errorm);
                    request.setAttribute("calendario", calendario);
                    try {
                        router=as.getFactory().getAction(as.getNombreClaseRecurso(crearcalendario),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(GuardarCalendarioAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (InstantiationException ex) {
                        Logger.getLogger(GuardarCalendarioAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IllegalAccessException ex) {
                        Logger.getLogger(GuardarCalendarioAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }
                  
                }
            } else {
                try {
                    router=as.getFactory().getAction(as.getNombreClaseRecurso(listarcursos),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                } catch (ClassNotFoundException ex) {
                    Logger.getLogger(GuardarCalendarioAccion.class.getName()).log(Level.SEVERE, null, ex);
                } catch (InstantiationException ex) {
                    Logger.getLogger(GuardarCalendarioAccion.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IllegalAccessException ex) {
                    Logger.getLogger(GuardarCalendarioAccion.class.getName()).log(Level.SEVERE, null, ex);
                }
             
            }
        } else {
            router = new AccionRouter("inicio");
        }
        return router;
    }
}
